<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<script type="text/javascript">
			// 定义必须首字母是大写 定义一个Person类
			function Person(name,age) {
				this.name = name;
				this.age = age;
				// 使用外面定义个方法调用
				this.sayHi = sayHi;  //函数名就是一个引用
				// 定一个方法
				// this.sayHi = function() {
				// 	console.log('hello');
				// }
			}
			// 在外面定义一个函数
			function sayHi(){
				console.log('hahaha' + this.name)
			}
			// 实例化对象__proto__ 和构造函数的 prototype 的指向是一样的
			let p = new Person('xiaoming',18);
			let o = new Person('xiaolaji',20);
			console.log(p.sayHi === o.sayHi);   //false 因为调用的时候分配的内存首地址是不一样的  所以是false   (在构造函数里面定义一个方法就会这样)
			
			console.log(p.sayHi === o.sayHi);   //true (单独在外面定义一个方法指向就是一样的)
			// 调用方法
			p.sayHi();   //打印出来就是hahahaxiaoming
			
			sayHi();   //这样打印出来就是hahaha
			
			// call调用可以确定this指向o对象
			p.sayHi.call(o);
			
			console.log(p)
		</script>
	</body>
</html>
